Virtual machines are software-based implementations or reproductions of the software and hardware resources of a physical computing device. For example, software known as a hypervisor may be installed and executed on a physical computing device, where such hypervisor software is operational to create, manage, relocate, or erase one or more virtual machines, using the underlying resources of the physical computing device.
For example, a hypervisor running on a physical computing device may allocate a portion of the processing, memory, and other resources of the physical computing device for the creation and execution of a first virtual machine, while allocating a remainder of the processing, memory, and other resources of the physical computing device for the creation and execution of a second virtual machine. In this way, the two virtual machines may execute simultaneously using the same underlying resources. However, the two virtual machines may operate in isolation from one another. As a result, for example, the two virtual machines may execute different operating systems, applications, network interfaces, and may generally operate independently of one another, as if the two virtual machines were two actual, separate computing devices.
Thus, the use of such virtual machines provides a great deal of flexibility in the deployment of underlying hardware resources. For example, allocations of the underlying hardware resources may be adjusted as needed over time, so as, e.g., to optimize operations of multiple virtual machines with respect to a desired task to be performed at a given point in time.
Additionally, virtual machines offer a high level of redundancy and fault tolerance. For example, it is possible to create a copy of a given virtual machine using a separate physical computing device, so that any failure of the original virtual machine may be mitigated by the availability of the previously-stored copy thereof.
In order to provide such redundancy and fault tolerance, processes have been developed for migrating (e.g., transferring a snapshot of) a virtual machine at a point in time for storage at a remote physical computing device. Then, in the event of a malfunction of the virtual machine, operations of the virtual machine may immediately recommence from the point in time at which the snapshot was taken, using the transferred, stored copy of the virtual machine.
Some such processes, sometimes referred to as checkpointing, may be implemented using a variety of known techniques. For example, one straightforward implementation is simply to pause all operations of a virtual machine to be copied, and to thereafter transfer the copy of the virtual machine to a desired location. However, when using such techniques, the virtual machine being copied becomes entirely unavailable throughout the copying process. Moreover, for very large virtual machines, the copying process may require an unacceptably long amount of time, so that, in many scenarios, such techniques are undesirable or otherwise unsatisfactory.
Attempts have been made to improve upon such processes. For example, techniques known as pre-copying techniques have been developed which seek to copy portions of a virtual machine which are unchanging or infrequently changing, while allowing the virtual machine to otherwise continue normal operations. Then, the virtual machine may eventually be paused for the purpose of copying the remaining, frequently-changing portions thereof. However, despite the availability of these and other attempted optimizations, no checkpointing techniques yet exist which provide desired levels of speed and availability, particularly for large and frequently changing virtual machines.